from pyramid.config import Configurator

#from .models import DBSession
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy

from pyramid_beaker import session_factory_from_settings

from sqlalchemy import engine_from_config

from pdm.models import initialize_sql

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    engine = engine_from_config(settings, 'sqlalchemy.')
    initialize_sql(engine)

    session_factory = session_factory_from_settings(settings)

    authn_policy = AuthTktAuthenticationPolicy('s0secret')
    authz_policy = ACLAuthorizationPolicy()
    
    config = Configurator(
        settings=settings,
        root_factory='pdm.models.RootFactory',
        authentication_policy=authn_policy,
        authorization_policy=authz_policy,
        session_factory=session_factory
    )
    """
    config.add_subscriber('pdm.subscribers.add_base_template',
                          'pyramid.events.BeforeRender')
    config.add_subscriber('pdm.subscribers.csrf_validation',
                          'pyramid.events.NewRequest')
	"""
    config.add_static_view('static', 'pdm:static')
    
    config.add_route('login', '/login')
    config.add_route('add_usuario', '/add_usuario')
    config.add_route('delete_usuario', '/delete_usuario')
    config.add_route('modificar_usuario', '/modificar_usuario')     
    config.add_route('consulta_usuario', '/consulta_usuario')
    config.add_route('registrarUsuario', '/registrarUsuario')
    config.add_route('add_rol', '/add_rol')
    config.add_route('delete_rol', '/delete_rol')
    config.add_route('modificar_rol', '/modificar_rol')     
    config.add_route('consulta_rol', '/consulta_rol')
    config.add_route('registrar_rol', '/registrar_rol')
    config.add_route('add_proyecto', '/add_proyecto')
    config.add_route('delete_proyecto', '/delete_proyecto')
    config.add_route('modificar_proyecto', '/modificar_proyecto')     
    config.add_route('consulta_proyecto', '/consulta_proyecto')
    config.add_route('registrar_proyecto', '/registrar_proyecto')
    config.add_route('add_tipo_item', '/add_tipo_item')
    config.add_route('delete_tipo_item', '/delete_tipo_item')
    config.add_route('modificar_tipo_item', '/modificar_tipo_item')     
    config.add_route('consulta_tipo_item', '/consulta_tipo_item')
    config.add_route('registrar_tipo_item', '/registrar_tipo_item')
    config.add_route('index', '/index')
    config.add_route('home', '/')
    config.add_route('rol', '/rol')
    config.add_route('proyecto', '/proyecto')
    config.add_route('tipo_item', '/tipo_item')
    
    
    config.scan()
    
    return config.make_wsgi_app()

